/**
 * 邮箱
 * @param {*} s
 */
export function isEmail(s) {
  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

/**
 * 手机号码
 * @param {*} s
 */
export function isMobile(s) {
	// if(/^1(6[2,5,7]\d{8})|(7[0,1]\d{8})$/.test(s)){
		
	// 	return {
	// 		isShow: true,
	// 		text:"手机号码不正确，请使用真实手机号码注册"
	// 	} 
		
	// }
	
  return !/^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(s)
}

/**
 * 电话号码
 * @param {*} s
 */
export function isPhone(s) {
  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}


/**
 * 密码验证
 * @param {*} pws 密码
 */
export function isCheckPassword(pws){
	if (pws.length < 6 ) {
		return true
	}

	return false
}
/**
 * 确认密码
 * @param pws 新密码
 * @param pws2  确认新密码
 */
export function confirmPassword(pws,pws2){
	if(pws != pws2){
		return true
	}
	return false
}
/**
 * 验证码验证
 * @param {*} code 验证码
 */
export function isCheckCode(code) {
	if (code.length != 6) {
		return true
	}
	
	return {
		isShow:false
	}
}

/**
 * URL地址
 * @param {*} s
 */
export function isURL(s) {
  return /^http[s]?:\/\/.*/.test(s)
}

/**
 * 是否小于
 * @param {*} s 字符
 * @param {*} l 长度
 */
export function lt(s, l) {
  return s.length < l
}

/**
 * 是否小于等于
 * @param {*} s 字符
 * @param {*} l 长度
 */
export function le(s, l) {
  return s.length <= l
}

/**
 * 是否大于
 * @param {*} s 字符
 * @param {*} l 长度
 */
export function gt(s, l) {
  return s.length > l
}

/**
 * 是否大于等于
 * @param {*} s 字符
 * @param {*} l 长度
 */
export function ge(s, l) {
  return s.length > l
}

export function isvalidUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/* 合法uri */
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母 */
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母 */
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母 */
export function validatAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/* 验证pad还是pc */
export const vaildatePc = function() {
  const userAgentInfo = navigator.userAgent
  const Agents = ['Android', 'iPhone',
    'SymbianOS', 'Windows Phone',
    'iPad', 'iPod'
  ]
  let flag = true
  for (let v = 0; v < Agents.length; v++) {
    if (userAgentInfo.indexOf(Agents[v]) > 0) {
      flag = false
      break
    }
  }
  return flag
}

/**
 * validate email
 * @param email
 * @returns {boolean}
 */
export function validateEmail(email) {
  const re = /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(email)
}

/**
 * 判断身份证号码
 */
export function cardid(code) {
  const list = []
  let result = true
  let msg = ''
  const city = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江 ',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北 ',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏 ',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门',
    91: '国外 '
  }
  if (!validatenull(code)) {
    if (code.length === 18) {
      if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
        msg = '证件号码格式错误'
      } else if (!city[code.substr(0, 2)]) {
        msg = '地址编码错误'
      } else {
        // 18位身份证需要验证最后一位校验位
        code = code.split('')
        // ∑(ai×Wi)(mod 11)
        // 加权因子
        const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        // 校验位
        const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x']
        let sum = 0
        let ai = 0
        let wi = 0
        for (let i = 0; i < 17; i++) {
          ai = code[i]
          wi = factor[i]
          sum += ai * wi
        }
        if (parity[sum % 11] !== code[17]) {
          msg = '证件号码校验位错误'
        } else {
          result = false
        }
      }
    } else {
      msg = '证件号码长度不为18位'
    }
  } else {
    msg = '证件号码不能为空'
  }
  list.push(result)
  list.push(msg)
  return list
}

/**
 * 判断姓名是否正确
 */
export function validatename(name) {
  const regName = /^[\u4e00-\u9fa5]{2,4}$/
  if (!regName.test(name)) return false
  return true
}

/**
 * 判断是否为整数
 */
export function validatenum(num, type) {
  let regName = /[^\d.]/g
  if (type === 1) {
    if (!regName.test(num)) return false
  } else if (type === 2) {
    regName = /[^\d]/g
    if (!regName.test(num)) return false
  }
  return true
}

/**
 * 判断是否为小数
 */
export function validatenumord(num, type) {
  let regName = /[^\d.]/g
  if (type === 1) {
    if (!regName.test(num)) return false
  } else if (type === 2) {
    regName = /[^\d.]/g
    if (!regName.test(num)) return false
  }
  return true
}

/**
 * 判断是否为空
 */
export function validatenull(val) {
  if (typeof val === 'boolean') {
    return false
  }
  if (typeof val === 'number') {
    return false
  }
  if (val instanceof Array) {
    if (val.length === 0) return true
  } else if (val instanceof Object) {
    if (JSON.stringify(val) === '{}') return true
  } else {
    if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') return true
    return false
  }
  return false
}

/**
 * @name 身份证验证
 * @type function
 * @param {number} idcode 身份证号
 * @return {boolen} ture or false
 */
export function IsCard(idcode) {
             // 加权因子
                 var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
                 // 校验码
                 var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
             
                 var code = idcode + "";
                 var last = idcode[17];//最后一位
             
                 var seventeen = code.substring(0,17);
             
                 // ISO 7064:1983.MOD 11-2
                 // 判断最后一位校验码是否正确
                 var arr = seventeen.split("");
                 var len = arr.length;
                 var num = 0;
                 for(var i = 0; i < len; i++){
                     num = num + arr[i] * weight_factor[i];
                 }
                 
                 // 获取余数
                 var resisue = num%11;
                 var last_no = check_code[resisue];
             
                 // 格式的正则
                 // 正则思路
                 /*
                 第一位不可能是0
                 第二位到第六位可以是0-9
                 第七位到第十位是年份，所以七八位为19或者20
                 十一位和十二位是月份，这两位是01-12之间的数值
                 十三位和十四位是日期，是从01-31之间的数值
                 十五，十六，十七都是数字0-9
                 十八位可能是数字0-9，也可能是X
                 */
                 var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
             
                 // 判断格式是否正确
                 var format = idcard_patter.test(idcode);
             
                 // 返回验证结果，校验码和格式同时正确才算是合法的身份证号码
				 console.log('last === last_no && format ? true : false;',last === last_no && format ? true : false)
                 return last === last_no && format ? true : false;
}
/**
 * @name 银行卡格式验证
 * @type function
 * @param {number} data 银行卡号
 * @return {boolen} ture or false
 */
 export function regBank(bankno){
 // var regExp = /^([1-9]{1})(\d{15}|\d{18})$/; 
 // return regExp.test(data) 
 var lastNum = bankno.substr(bankno.length - 1, 1);//取出最后一位（与luhm进行比较）
     var first15Num = bankno.substr(0, bankno.length - 1);//前15或18位
     var newArr = [];
 
     for (var i = first15Num.length - 1; i > -1; i--) { //前15或18位倒序存进数组
         newArr.push(first15Num.substr(i, 1));
     }
 
     var arrJiShu = []; //奇数位*2的积 <9
     var arrJiShu2 = []; //奇数位*2的积 >9
     var arrOuShu = []; //偶数位数组
     for (var j = 0; j < newArr.length; j++) {
         if ((j + 1) % 2 == 1) {//奇数位
             if (parseInt(newArr[j]) * 2 < 9)
                 arrJiShu.push(parseInt(newArr[j]) * 2); else
                 arrJiShu2.push(parseInt(newArr[j]) * 2);
         }
         else //偶数位
             arrOuShu.push(newArr[j]);
     }
 
     var jishu_child1 = [];//奇数位*2 >9 的分割之后的数组个位数
     var jishu_child2 = [];//奇数位*2 >9 的分割之后的数组十位数
     for (var h = 0; h < arrJiShu2.length; h++) {
         jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
         jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
     }
 
     var sumJiShu = 0; //奇数位*2 < 9 的数组之和
     var sumOuShu = 0; //偶数位数组之和
     var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
     var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
     var sumTotal = 0;
     for (var m = 0; m < arrJiShu.length; m++) {
         sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
     }
     for (var n = 0; n < arrOuShu.length; n++) {
         sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
     }
     for (var p = 0; p < jishu_child1.length; p++) {
         sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
         sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
     }
     //计算总和
     sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
     //计算Luhm值
     var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
     var luhm = 10 - k;
     if (lastNum == luhm) {
         return true;
     }
     else {
         return false;
     }
} 